#ifndef _SYS_UUID_H_
#define _SYS_UUID_H_

#include "FanObj.h"
#include "SysTypes.h"

#define UUID_VTABLE(self)   ((UuidVTable*)((FanObj*)self)->vtable)


extern Type*    Uuid_classType;
extern VTable*  Uuid_classVTable;


/* [sys::Uuid] Attributes */
struct Uuid
{
  FanObj        super;
};


/* [sys::Uuid] Virtual-table */
typedef struct UuidVTable
{
  FanObjVTable  super;
} UuidVTable;


/* [sys::Uuid] Methods and fields */
Bool            Uuid_equals(Obj self, NullableObj that);
Int             Uuid_compare(Obj self, Obj that);
Int             Uuid_hash(Obj self);
Str*            Uuid_toStr(Obj self);
Uuid*           Uuid_make(void);
Uuid*           Uuid_makeBits(Int hi, Int lo);
Uuid*           Uuid_fromStr_1(Str* s);
Uuid*           Uuid_fromStr(Str* s, Bool checked);
Int             Uuid_bitsHi(Uuid* self);
Int             Uuid_bitsLo(Uuid* self);


/* [sys::Uuid] Type-system functions */
Type*           Uuid_initType(void);
VTable*         Uuid_initVTable(void);
void            Uuid_initStatic(void);


#endif
